package com.bolt.support.spring.jpa.annotation;

import com.bolt.support.query.conditions.domain.MatchType;
import com.bolt.support.spring.jpa.jpql.JoinType;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
public @interface Filter {

    /**
     * 基本对象的属性名
     *
     * @return
     */
    String name() default "";

    /**
     * 查询方式
     *
     * @return
     */
    MatchType type() default MatchType.EQ;

    /**
     * 连接查询的属性名，如User类中的dept
     */
    String joinName() default "";

    /**
     * 默认左连接
     */
    JoinType join() default JoinType.INNERJOIN;

    /**
     *主要用于一个查询参数对多字段OR关联查如如
     *   @Filter(type = MatchType.CN ,blurry = "name,description")
     *   private String blurry;
     *   按名称或说明信息查询
     * @return
     */
    String blurry() default "";

    /**
     *  存在关联查询必须填写相关字段对的实体类
     * @return
     */
    Class owned() default void.class;


}

 